package com.lening.sellergoods.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lening.mapper.TbItemCatMapper;
import com.lening.pojo.TbItemCat;
import com.lening.pojo.TbItemCatExample;
import com.lening.pojo.TbItemCatExample.Criteria;
import com.lening.sellergoods.service.ItemCatService2;
import entity.PageResult;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * 服务实现层
 * @author Administrator
 *
 */
@Service
public class ItemCatServiceImpl2 implements ItemCatService2 {

	@Autowired
	private TbItemCatMapper itemCatMapper;


	@Test
	public void testi(){
		long it = getIt(70);
		System.out.println(it);
	}

	/**
	 * 我们删除无限极列表，删除父亲，必须把他的子节点全删除
	 * 我们拿到id，先拿这个id去数据库查询他有没有子节点
	 */
	List<Long> ids=new ArrayList<Long>();

	public void hh(long id){
		ids.add(id);
		TbItemCatExample example = new TbItemCatExample();
		Criteria criteria = example.createCriteria();
		criteria.andParentIdEqualTo(id);
		List<TbItemCat> list = itemCatMapper.selectByExample(example);
		if(list.size()==0){
		}else{
			for (TbItemCat cat : list) {
				ids.add(cat.getId());
				hh(cat.getId());
			}
		}
	}


	/**
	 *递归的原理，自己调用自己，直接满足判断条件(递归的终止条件)
	 * 过程中，自己每调用一次自己，栈里面增加一个自己，先进栈的压到下面去了，后出来
	 * 把开始方法往栈地下压的这个过程叫做，压栈（进栈），计算完出栈的过程叫做弹栈（出栈）
	 */
	public long getIt(long i){
		if(i==1){
			return 1;
		}
		return i*getIt(i-1);
	}


	/**
	 * 查询全部
	 */
	@Override
	public List<TbItemCat> findAll() {
		return itemCatMapper.selectByExample(null);
	}

	/**
	 * 按分页查询
	 */
	@Override
	public PageResult findPage(int pageNum, int pageSize) {
		PageHelper.startPage(pageNum, pageSize);		
		Page<TbItemCat> page=   (Page<TbItemCat>) itemCatMapper.selectByExample(null);
		return new PageResult(page.getTotal(), page.getResult());
	}

	/**
	 * 增加
	 */
	@Override
	public void add(TbItemCat itemCat) {
		itemCatMapper.insert(itemCat);		
	}

	
	/**
	 * 修改
	 */
	@Override
	public void update(TbItemCat itemCat){
		itemCatMapper.updateByPrimaryKey(itemCat);
	}	
	
	/**
	 * 根据ID获取实体
	 * @param id
	 * @return
	 */
	@Override
	public TbItemCat findOne(Long id){
		return itemCatMapper.selectByPrimaryKey(id);
	}

	/**
	 * 批量删除
	 */
	@Override
	public void delete(Long[] ids) {
		for(Long id:ids){
			itemCatMapper.deleteByPrimaryKey(id);
		}		
	}
	
	
		@Override
	public PageResult findPage(TbItemCat itemCat, int pageNum, int pageSize) {
		PageHelper.startPage(pageNum, pageSize);
		
		TbItemCatExample example=new TbItemCatExample();
		Criteria criteria = example.createCriteria();
		
		if(itemCat!=null){			
						if(itemCat.getName()!=null && itemCat.getName().length()>0){
				criteria.andNameLike("%"+itemCat.getName()+"%");
			}
	
		}
		
		Page<TbItemCat> page= (Page<TbItemCat>)itemCatMapper.selectByExample(example);		
		return new PageResult(page.getTotal(), page.getResult());
	}

	@Override
	public List<TbItemCat> findByParentId(Long parentId) {
		TbItemCatExample example=new TbItemCatExample();
		Criteria criteria = example.createCriteria();
		criteria.andParentIdEqualTo(parentId);
		return itemCatMapper.selectByExample(example);
	}
	
}
